package internal.exchange;

/**
 * @描述：在要排序的一组数中，对当前还未排好序的范围内的全部数，自上而下对相邻的两个数依次进行比较和调整，让较大的数往下沉，较小的往上冒。即：每当两相邻的数比较后发现它们的排序与排序要求相反时，就将它们互换。
 * @适用场合：冒泡排序是最慢的排序算法。在实际运用中它是效率最低的算法，时间复杂度为O(n^2)
 * @作者：hongxingfan
 * @时间：2014年9月5日 上午9:38:26
 */
public class BubbleSort {

    public static void main(String[] args) {
        int[] datas = { 9, 4, 1, 8, 7, 5, 2, 0, 3, 4, 6 };

        // 冒泡排序
        bubbleSort(datas);

        // 输出结果
        for (int data : datas)
            System.out.print(data + " ");
        System.out.println();
    }

    public static void bubbleSort(int[] datas) {
        int num = 0; // 比较次数11次外循环
        for (int i = 0; i < datas.length; i++) {
            num++;
            for (int j = i + 1; j < datas.length; j++) {
                // 开始交换过成
                if (datas[j] > datas[j - 1]) {
                    int tmp = datas[j - 1];
                    datas[j - 1] = datas[j];
                    datas[j] = tmp;
                }
            }
        }
        System.out.println(num);
    }
}
